package com.gec.zhs.service;

import com.gec.zhs.entity.dto.TokenUserInfoDto;
import com.gec.zhs.entity.dto.UserAccountDto;
import com.gec.zhs.entity.dto.UserCountInfoDto;
import com.gec.zhs.entity.pojo.UserInfo;
import com.gec.zhs.entity.query.UserInfoQuery;
import com.gec.zhs.entity.vo.PaginationResultVO;

import java.util.List;


/**
 * @author zhs
 * @version 1.0
 * @date 2025-01-11
 * @description 用户信息
 */
public interface UserInfoService {

    /**
     * 根据条件查询列表
     */
    List<UserInfo> findListByParam(UserInfoQuery param);

    /**
     * 根据条件查询列表
     */
    Integer findCountByParam(UserInfoQuery param);

    /**
     * 分页查询
     */
    PaginationResultVO<UserInfo> findListByPage(UserInfoQuery param);

    /**
     * 新增
     */
    Integer add(UserInfo bean);

    /**
     * 批量新增
     */
    Integer addBatch(List<UserInfo> listBean);

    /**
     * 批量新增/修改
     */
    Integer addOrUpdateBatch(List<UserInfo> listBean);

    /**
     * 多条件更新
     */
    Integer updateByParam(UserInfo bean, UserInfoQuery param);

    /**
     * 多条件删除
     */
    Integer deleteByParam(UserInfoQuery param);

    /**
     * 根据UserId查询对象
     */
    UserInfo getUserInfoByUserId(String userId);


    /**
     * 根据UserId修改
     */
    Integer updateUserInfoByUserId(UserInfo bean, String userId);


    /**
     * 根据UserId删除
     */
    Integer deleteUserInfoByUserId(String userId);


    /**
     * 根据Email查询对象
     */
    UserInfo getUserInfoByEmail(String email);


    /**
     * 根据Email修改
     */
    Integer updateUserInfoByEmail(UserInfo bean, String email);


    /**
     * 根据Email删除
     */
    Integer deleteUserInfoByEmail(String email);


    /**
     * 根据NickName查询对象
     */
    UserInfo getUserInfoByNickName(String nickName);


    /**
     * 根据NickName修改
     */
    Integer updateUserInfoByNickName(UserInfo bean, String nickName);


    /**
     * 根据NickName删除
     */
    Integer deleteUserInfoByNickName(String nickName);

    /**
     * 登陆
     */
    TokenUserInfoDto login(String email, String password, String ip);

    void register(String email, String nickName, String password);


    /**
     * 修改用户信息
     */
    void updateUserInfo(UserInfo userInfo, TokenUserInfoDto tokenUserInfoDto);

    /**
     * 获取用户详情信息
     */
    UserInfo getUserDetailInfo(String currentUserId, String userId);

    /**
     * 获取用户账号信息
     */
    UserCountInfoDto getUserCountInfo(String userId);

    /**
     * 更新硬币数量
     */
    Integer updateCoinCountInfo(String userId, Integer changeCount);
}